home *** CD-ROM | disk | FTP | other *** search
- Path: xanth!cs.odu.edu!Amiga-Request
- From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
- Newsgroups: comp.sources.amiga
- Subject: v90i196: ls 4.0k - yet another unix-like ls command, Part02/04
- Message-ID: <13040@xanth.cs.odu.edu>
- Date: 3 Jul 90 19:23:52 GMT
- Sender: tadguy@cs.odu.edu
- Reply-To: kim@uts.amdahl.com (Kim E. DeVaughn)
- Lines: 1223
- Approved: tadguy@cs.odu.edu (Tad Guy)
- X-Mail-Submissions-To: Amiga@cs.odu.edu
- X-Post-Discussions-To: comp.sys.amiga
-
- Submitted-by: kim@uts.amdahl.com (Kim E. DeVaughn)
- Posting-number: Volume 90, Issue 196
- Archive-name: unix/ls-4.0k/part02
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 4)."
- # Contents: ls.uu src/ls.c.ab
- # Wrapped by tadguy@xanth on Tue Jul 3 15:22:11 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'ls.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ls.uu'\"
- else
- echo shar: Extracting \"'ls.uu'\" \(22474 characters\)
- sed "s/^X//" >'ls.uu' <<'END_OF_FILE'
- Xbegin 755 ls
- XM```#\P`````````"``````````$```Q9```#%P```^D```Q9)$@D`$GY````;
- XM`$CGP."9_``````@/```%#PB/``!``$L>``$3J[_.DJ`9@``"$S?!P-.=2!`=
- XM)$`B0"`\```"\2#<4X!F^B`<9PX@2='<U=`@BB1)4X!@\"A)V?P`````3-\'B
- XM`RQX``0I3@O(*4\+S"9N`11P`"(\```P`$ZN_LY*JP"L9B1!ZP!<3J[^@$'K,
- XM`%Q.KOZ,)`!G``":3J[_?")"3J[^AF```(Q#^@"H<`!.KOW8*4`4.&8$<&1@'
- XM7B9K`*S7R]?+)FL`$-?+U\L@`G(`$AO0@5*`3KD``"8(2H!G1BE`"\0B2R!`9
- XM<``0*___3KD``"SJ#$(``F4.$/P`("`"(DI.N0``+.H@;`O$3KD``"'X<`!@K
- XM!"`O``0O`"!L"\1.N0``)BPB;!0X+'@`!$ZN_F(@/```%#PB3)/\`````"X?.
- XM+FP+S"QX``1.KO\N(`=.=61O<RYL:6)R87)Y`$Y5__A(YR`"*T#_^$CM``+_8
- XM_$JL``!G%@@L````#F<.)"P``"("+&P4.$ZN_Z9*K``$9P@@;``$3KHDDDJL,
- XM``AG""!L``A.NB2$D\DL>``$3J[^VB!`(6P+\`"X(6W_^`"4("W__$ZZ+?1,)
- XMWT`$3EU.=4Y5__Q(YP$2)D@N`$JL``!G'`@L````#F<4("P``"(`+&P4.$ZN1
- XM_Z:1R"E(``!P_[Z`9@XL;!0X3J[_?"E``"0N`"!+0^P'BDZZ+8I2@"]```Q!>
- XM[!$X(DM.NBQT(&\`#$/L$3@@"$(Q"``@!W)GD(%G.')CD(%G0E6`9U13@&=09
- XM7X!G3%.`9UQ;@&=F7X!G<%.`9WH$@``!T_)G``"`<@J0@6<``()@``"20>P''
- XMC&$`!X8@!W(480#^UB\+2&P'H$AL$3A.NB.J3^\`#&```)`O"TAL![Y(;!$XM
- XM3KHCE$_O``Q@>D'L$3A#[`?>3KHL(&!L0>P1.$/L!_I.NBP28%Y![!$X0^P(D
- XM'$ZZ+`1@4$'L$3A#[`A"3KHK]F!"0>P(4F$`!Q1@0"\+2&P(?DAL$3A.NB,^[
- XM3^\`#&`D+P<O"TAL"*)(;!$X3KHC*$'L$3AA``;F(`=R%&$`_C9/[P`00>P1]
- XM.&$`!M),WTB`3EU.=4Y5_\Q(YP\R)D@D22(\___W-=*2+T$`'.6!5H$K0/_8"
- XM(`$B/```!;5.NBS&*@`&A0``!\`B/```!;4K0/_H3KHLD$J`:@)6@.2`(B\`>
- XM')*`(`'EB-"!5(`O00`<<F9&`4ZZ+(YR9D8!*T#_[$ZZ+&)4@'(%3KHL>B(OC
- XM`!R2@%*!+BW_[%:'2.\``@`@<`R^@&\$4H6>@"M'_^P,A0``!]!L"B`%!(``#
- XM``=L8`@@!02````'T"X`("H`"'(R3KHL,B]``"0@*@`$<CQ.NBP$(B\`)-"!R
- XM<CPO0``D3KHL%"P!("\`)'(\3KHL"'(\+T``)$ZZ*_XH`2`O`"1R/$ZZ*_)RF
- XM&$ZZ*^PO00`<("W_V`R`````!V0``6;00#`[``9.^P`$``P`=`"B`-``\@$4,
- XM`39![?_<(@@L;!0X3J[_0"`M_]R0DBP`("W_[.6`0>P&O-'`)$@N+P`@<%K0?
- XM@+R`;@1*AFH8+P4O!R\22&P(N"\+3KHAD$_O`!1@``$(+P0O+P`@+P<O$DALI
- XM",8O"TZZ(71/[P`88```["`M_^SE@"\&+P0O+P`D+P4O+P`P0>P&O"\P"`!(N
- XM;`C<+PM.NB%&3^\`(&```+X@+?_LY8`O!B\$+R\`)"\'0>P&O"\P"``O+P`T:
- XM2&P(_B\+3KHA&$_O`"!@``"0+P8O!"\O`"0O!R\O`#`O+?_L2&P)("\+3KH@W
- XM]$_O`"!@;"\&+P0O+P`D+P<O+P`P+RW_[$AL"48O"TZZ(-)/[P`@8$HO!B\$Z
- XM+R\`)"\'+RW_["\O`#1(;`EL+PM.NB"P3^\`(&`H+P8O!"\O`"0O+P`L+RW_!
- XM["\'2&P)DB\+3KH@CD_O`"!@!D(3<`%@`G``3-],\$Y=3G5.5?_T2.<`,"9M:
- XM``A([0,`__0D;?_T($I2BB)M__@@$4J`;P1P9&`"<"T0@")*4HH(*P`'``-G`
- XM!'!H8`)P+1*`(DI2B@@K``8``V<$<'-@`G`M$H`B2E**""L`!0`#9P1P<&`"`
- XM<"T2@")*4HH(*P`$``-G!'!A8`)P+1*`(DI2B@@K``,``V<$<"U@`G!R$H`B_
- XM2E**""L``@`#9P1P+6`"<'<2@")*4HH(*P`!``-G!'`M8`9P`!`L!O`2@")*.
- XM4HH(*P````-G!'`M8`)P9!*`0A(@$R(``D'_`$J!9QHD2`@```=G"!5\`$@`<
- XM`6`&%7P`*P`!<`%@`G``3-\,`$Y=3G5.5?_T2.<A$B9)*TC_^`@L``8`$V8`0
- XM`(Y*K``H9E8@+?_X(@`D+``(+&P4.$ZN_XY*@&8V2JP)N&9J(#P``"`@P*P`(
- XM#&=>4JP)N$ZN_WPO`$AL";Q(;!$X3KH?&D'L$3AA``+83^\`#&`Z(&P`""XHL
- XM`!1@!"XL`"@@*P!\(@=.NBCB2H%G!'`!8`)P`"]``!`@*P!\(@=.NBC*(B\`O
- XM$-"!)T``@$S?2(1.74YU3E7__$CG(1`F2`@L``(`$V9$("L`@')(3KHHG$J!H
- XM9P1P`6`"<``O0``,("L`@')(3KHHA"(K`(#0@20O``S0@BX`2JL`?&8$<`%@+
- XM`G``)`?4@"`"8`0@*P"`3-\(A$Y=3G5.5?^X2.<!$"9(0>L`!$/K`'0O"2](P
- XM``Q<Y^``@L``8`#&<Z0>P,B$ZZ)90N`"`'0>P1W
- XM.$/L#(A.NB4(2H!F'$'L$3A.NB5XOH!L$'`O0>P1.+`P>`!F!E*'8`)^``@L7
- XM``0`#&<4("L`!$J`;PQ![!$X0^P*(DZZ)6Y![!$X0^P*)$ZZ)6)![!$XT<=A<
- XM``"`("L`!$J`;PA![`;Q80`!N@@L``<`#V<T2BL`D&<N0>P&_F$``:1!ZP"0"
- XM+PA(;`HF2&P1.$ZZ'()![!$X80``0$'L!O%A``&"3^\`#$S?"(!.74YU+PL@B
- XM/````1!.NAP@)D!*@&<,(`MR#-"!)T``"&`&".P````/(`LF7TYU2.<P$B9(8
- XM($M.NB2F2H!O$"(L"^@D"R8`+&P4.$ZN_]!,WT@,3G5.5?_\2.<P`BM(__P@:
- XM+`OH(@`D+?_\=@$L;!0X3J[_T$S?0`Q.74YU+PX(+``$`!9F)'``(@`L>``$G
- XM3J[^SBE``!0(```,9Q1![`HL88P([`````]@!@CL````#RQ?3G5.5?_\2.<Q<
- XM`BX`*T'__"`L`#"PK`P<;P``A'`!OH!O?`@L``<`#F9T0>P'%V$``)8@!U.`#
- XM+RW__"\`2&P*/$AL$3A.NAMP0>P1.$ZZ(]Y/[P`0(BP`,+*`;@Q![!$X0^P*V
- XM5$ZZ)FI![!$X80#_#D'L!O%A``!0("P+["(`0>P1."0()CP```$L+&P4.$ZN;
- XM_]9![`I>80#^Y&$`_RY,WT",3EU.=4CG`Q`F2"X`?`!@!"934H:\AVP$2I-FE
- XM]"`+3-\(P$YU3E7__"M(__P(+``!``]G""!M__QA`/Z@3EU.=4Y5_\!(YR\PY
- XM*TC_Q$'L!O5ATD'M_^1#[?_@3KH:Z$JL`#!F!BEM_^0`,$JL`"QF!BEM_^``Y
- XM+"9M_\0(+``"``QG``'(>@!^`"938%0@:P`(("@`!$J`;Q8(+``!``]F#D/HJ
- XM``@@24/L!H-.NB,&(&L`"%"(3KHBU-Z`4H4(+``"``YG&B!K``@@*``$2H!O5
- XM#D/H``@@24ZZ(K*>@%.%)E-*DV:H2H5F`E*%(`<O0``<(`<B!4ZZ)`PN`"`OC
- XM`!PB!4ZZ)`!*@6<"4H<@+``PL*P,'&\(""P``P`,9P1X`6`:>``K0/_D8`H@D
- XM!U2`D:W_Y%*$("W_Y+"';.YP8W(`0>P,)!#!4<C__"`%(@1.NB.T+``@!2($[
- XM3KHCJDJ!9P)2AGX`(&W_Q"108```C$*M_^0F2F!2""P``@`.9Q`@:P`(("@`9
- XM!$J`;P1P`6`"<`!&@&<F(&L`"%"(3KHA\"!M_^1R`$/L#"0D"!(Q*`"P@6\(;
- XM0^P,)!.`*`!2K?_D(`8@2V$`_D(F0"`M_^2PA&P$2I-FHDJ'9APH+?_D(`4B?
- XM!$ZZ(R(L`"`%(@1.NB,82H%G`E*&4H<D4BM&_]B^AFP&2I)F`/]J?`!"K?_D=
- XM8`QP`!`35(#<@"M'_^1![`PD("W_Y-'`)D@N`%*'OH1MX'``$!,N!MZ`<`&XT
- XM@&\``.Z^K``P;P``YE.$8`#^\@@L``0`#&<$4JP,''X`)%-@2`@L``0`#&<FV
- XM(&H`"$?H``@@*``$2H!O#"!+0^P&@TZZ(39@"B!+0^P*:$ZZ(2I2AP@L``(`T
- XM#F<.(&H`""`H``1*@&\"4X<D4DJ29K0@+`P<(BP`,+*`;P@(+``#``QG!'@!D
- XM8!)4@"]``!P@`2(O`!Q.NB(T*``@!R]``!P@!R($3KHB)"X`("\`'"($3KHB;
- XM&$J!9P)2ARM'_]AP8W(`0>P,)!#!4<C__"M!_^1@%B!M_^0@+`P<0^P,)"((G
- XM$X`8`%*M_^0@+?_DL(1MXB`L`"Q3@$CM``'_U&X&<@$K0?_4<`$L+?_8*T#_%
- XMT"`&(BW_U$ZZ(;0J`"`&(BW_U$ZZ(:A*@6<"4H4K1?_<?@`K;?_4_^`@;?_$F
- XM)E!@``%,<`&Z@&\T("W_X+"M_]1F*G``*T#_X`@L``$`#V<4("W_T"(%80#[U
- XMP@@L````#V8``30J+?_<4JW_T$*M_^0D;?_(8```V"!J``@@*``$2H!J&$/H7
- XM``A![!$X3KH?[D'L$3A.NA^N*@!@6$(L$3AZ``@L``(`#F9*(&H`"%"(3KH?V
- XMDBH`""P``0`/9PQ![!$X0^P&_DZZ'Z0@:@`(4(@O2``<0>P1.")O`!Q.NA^.\
- XM""P``0`/9PQ![!$X0^P&\4ZZ'WH@!B!*80#[Q"1`("W_Y"(`4H&RA&PT2I)G&
- XM,'(`0>P,)!(P"``N`5*'0>P1.$ZZ'R(L`&`(%KP`(%.'4H9![!$XT<8F2+Z%&
- XM;.Q"$T'L$3AA`/I04JW_Y"HM_]PL+?_8("W_Y+"$;`9*DF8`_QI![`<F80#ZX
- XM5&$`^G@N+?_,4H=2K?_@(&W_R"90*TO_R"M'_\P(+`````]F"KZ&;`9*DV8`T
- XM_IY![`;Z80#[0DS?#/1.74YU3E7__$CG`#`F2"1)0I)@''``$!LO0``((!)R>
- XM"DZZ']@B+P`(T(%R,)"!)(`0$W(PL`%E!G(YL`%CUB`+3-\,`$Y=3G5.5?_<.
- XM2.<A,BM(_^@@;!+P3KH>2"X`(&P2\")(T\<F22)++TD`&'`!OH!O&'`ZL"O_^
- XM_V<0%KP`+R!L$O`L2-W'0BX``2!L$O!.NAX0(&P2\-'`)D@D;?_H+T@`%"`JL
- XM``1*@&\4""P``0`/9PP@2T/L!OY.NAX>)D!!Z@`(+T@`'"!+(F\`'$ZZ'@HF$
- XM0"`J``1*@&\2""P``0`/9PH@2T/L!O%.NAWN1>P1."9L!X9@``$8$!-R);`!O
- XM9PQT7+`"9P84P&```0)2B[`!9@``TB!+0^W_[&$`_N8F0"M+__`,K0```&/_0
- XM[&\&<&,K0/_L<``0$P1``"5G<`1``#UG*E5`9QH$0``*9RQ50&<*5T!G'E-`;
- XM9PY@7D?L$L1@7$?L$KA@5D?L$N1@4$?L$J1@2D?L$M!@1"!M_^@@*``$2H!O)
- XM%`@L``$`#V<,("W_[$J`;P1>K?_L""P``P`.9P8F;!+P8!8F;P`48!`@2A"\!
- XM`"54BD(H``%'[`<G($M.NAS>+@!@!A3\`"!2A[ZM_^QM]"!*(DM.NAS^)$`F3
- XM;?_P8"AP`!`3!$``7&<8!$``$F<&74!G"&`0%/P`"F`*%/P`"6`$%/P`7$(26
- XM4HM*$V8`_N9![!$X80#WU@@L``<`#V<X)FW_Z$HK`)!G+D'L!OYA`/D&0>L`B
- XMD"\(2&P*:DAL$3A.NA/D0>P1.&$`]Z)![`;Q80#XY$_O``P@;P`80A!,WTR$Z
- XM3EU.=4CG(Q`F2'X`1@?.JP!T0>P2Q$/L"G1.NAQ6&6P&\!++?`-@+G`!(@#M%
- XMH<*'9PI![!+,D<9R+1"!(@98@20`XZ(B!\*"9@I![!+(D<80O``M4X9*AFK.L
- XM2BL`D&8&&7P`+1+$0>L`A$AL$N1#[!*X3KH62%A/("L`!$J`;S`(+``"`!-G1
- XM#D'L$J1#[`I^3KH;X&`,0>P2I$/L"H!.NAO20>P2T$/L"H).NAO&8"@@2V$`O
- XM]$@O`$AL!@I(;!*D3KH3`BZK`'Q(;`8*2&P2T$ZZ$O)/[P`4($MA`/T$3-\(#
- XMQ$YU2.<P,"9(0>P&]6$`]^1P`"E`#!@I0`P4)E-@5&$`]M8(+`````]F``#,]
- XM(&L`""`H``1*@&\(""P``@`.9C`D2`@L``$`#&<(($IA`/[48`8@2F$`]"8@>
- XM:P`(80#SO-&L#!0@:P`(("@`?-&L#!@F4TJ39J@@/(````'`K``,9FP(+``"9
- XM``YF."`L#`PB+`P0)`'4@'8!M(-O4B\L#!@O+`P4+P$O`$AL!@Y(;!$X3KH2:
- XM,$'L$3AA`/7N3^\`&&`L("P,$'(!L(%O(B\L#!@O+`P4+P!(;`9#2&P1.$ZZ4
- XM$@)![!$X80#UP$_O`!1![`;Z80#V_DS?#`Q.=2\+)D@(+``#``UG$D'L"]PB5
- XM2TZZ%VA*@&L$<`!@'`@L``(`#6<2($M#[`O03KH73DJ`:P1P`&`"<`$F7TYU9
- XM2.<`$B9((`MG'F`0($LL>``$3J[^^"!`3KH1>"!32I!FZB!+3KH1;$S?2`!.3
- XM=4Y5_]Q(YR<R)DDK2/_L<``I0`P0*4`,#"X`*4`,''`,3KH1'B]``"1*@&8&Y
- XM<`!@``)&(&\`)$ZZ'$QP#$ZZ$0(O0``@2H!G``(<($!.NAPV80#U/`@L````P
- XM#V8``?H@+?_L(@`D"RQL%#A.KO^4+`!*AF<``6A!ZP"$80#_&$J`9P`!6B`KW
- XM``1*@&\&1>P.X&`$1>P0#$'K``@O2``<(DI.NA34*@`D;P`<""P`!P`-9BQ*S
- XMA6<H("P`#"]``"@(P``5*4``#"!*0^P*ADZZ%*@J``I%``$@+P`H*4``#`@L<
- XM``8`#6842H5G$"!*0^P*CDZZ%(0J``I%``$(+``$``YG%$J%9Q`@2B)L$O1.Q
- XMNA1H*@`*10`!""L`!P!W9Q`(+`````QG!'`!8`)P`"H`2H5G``"J4H<@*P`$X
- XM2H!O-"!O`"`B2TZZ%C)*@&<``1@(+``"``]G``"&4JP,#%*L"_A2K`P`""P`J
- XM`@`39C92K`P$8#`(+``#``]G8E*L#!!2K`O\4JP,`"!M_^PB2V$`\'@@2V$`!
- XM\1[1K`P$("L`?-&L#`@@;P`<3KH82"H`NJP,'&\:("L`!$J`:@8I10P<8`P(;
- XM+``"``YF!"E%#!P@;P`D(DM.NA6D2H!G``"*2H9F`/YP("P,#-"L#!!F-@@L(
- XM``8`#F9B2H=F"`@L``(`#F<*0>P*DF$`\SI@3`CL``0`$P@L``4`#V<^0>P*"
- XMGF$`\R)@-'`,P*P`#&<L""P`!0`/9@X@;P`D80#T;E*L"_1@""!O`"1A`/Q4J
- XM("P,#-"L#!!O!%*L"_0@;P`D80#]=B`O`"!@$B!O`"1A`/UH(&\`(&$`_6!PJ
- XM`$S?3.1.74YU3E7_K$CG(3(F2"M)_[0@"R(`)"P`!"QL%#A.KO^:2H!F/$ZNP
- XM_WPN`'!MT("^@&802&P*J$AL$3A.N@["4$]@$B\'2&P*RDAL$3A.N@ZP3^\`5
- XM#$'L$3AA`/)J8``#'%*L`!P@;``$("@`!$J`;P``^@@L``8`#F8``/`D;?^T)
- XM2A)G``#F#*P````!`!QO``#:($I#[`VT3KH6ZDJ`9P``RD'L$3@B2DZZ&6Y^3
- XM``@L``,`#F8``(Y![`VT3KH6MD'L#(A#[`VT3KH6+DJ`9QA![`R(3KH6GD'LK
- XM#;1#[`R(3KH6%DJ`9EQ![`VT3KH6AB]``!1![`R(3KH6>B(O`!2R@&X&1>P-[
- XMM&`$1>P,B"!*3KH68BX`(`=![!$X(DI.NA782H!F'$'L$3A.NA9(OH!L$'`OT
- XM0>P1.+`P>`!F!E*'8`)^`$'L$3A#[`KJ3KH63D'L!OYA`/*X0>P1.-''80#Q4
- XM9$'L!O%A`/*F(&P`!"`H``1*@&IB""P``P`/9P`!^$'L#;0B2$ZZ$[0@2R)LY
- XM``1A`.WX""P``0`,9PH@;``$80#YG&`((&P`!&$`[NQ2K`O\4JP,`"!L``1AU
- XM`.YZT:P,!"!L``0@*`!\T:P,"`CL``$`$V```:`N+``,"`<`"F<(`*P``P```
- XM``P@2R)L``1A`/N2+T``&$J`9P`!=@@'``1F"`@'``IG``%<(@<"0?O_*4$`4
- XM#"!`)E!@``%$80#P\@@L````#V8``3P@:P`(("@`!$J`;P`!)B!M_[1.NA4T`
- XM(&L`"%"(+T``%$ZZ%28B+P`4TH!P)-*`(`%.N@QF)$!*@&<``/@@;?^T2A!GW
- XM,B!*(FW_M$ZZ%30@;?^T3KH4]%.`(&W_M!(P"`!T.K("9Q!T+[("9PH@2D/L6
- XM!H-.NA3\(&L`"%"(+T@`%"!*(F\`%$ZZ%.@@+``<L*P`(&<``)@B"G3^+&P47
- XM.$ZN_ZPO0``42H!G``""""P`!@`.9@A![`<F80#P!"E*$O`(+````!-G+$'MW
- XM_]A#[`[@3KH7&AE\`"H.X$(L#N%![?^X0^P0#$ZZ%P09?``J$`Q"+!`-(&\`_
- XM%")*80#\V@@L````$V<80>P.X$/M_]A.NA;<0>P0#$/M_[A.NA;0("\`%"(`\
- XM+&P4.$ZN_Z8@2DZZ"XPF4TJ39@#^NBE'``P@;P`880#YYBE'``Q3K``<3-],S
- XMA$Y=3G5.5?_L2.<`,$CM`P#_\"9M__`@;?_T0I!@``"$4HL0$W(@L`%G]G()9
- XML`%G\'(*L`%GZDH39W8@;?_T(!`B`.6!(&T`"-'!)$@@;?_T4I!P(K`39B8@N
- XM2U*+)(LO2``(8`)2BTH39P9P(K`39O1*$V8&)*\`"&`V0AM@)"2+8`)2BTH3T
- XM9Q00$W(@L`%G#'()L`%G!G(*L`%FYDH39Q!"&R!M__0,D````"!M`/]T3-\,J
- XM`$Y=3G5.5?_T2.<A,B9(*TG_]'X`(#P```$$3KH*=B1`2H!G0B(+=/XL;!0X<
- XM3J[_K"9`(`MG*B`+(@`D"DZN_YI*@&<00^H`A"QM__0LV2S9+-E^`2`+(@`L>
- XM;!0X3J[_IB!*3KH*4B`'3-],A$Y=3G5.5?_X+PLK0/_X!(```=3`9PAR"I"!"
- XM9QA@+$AL!RI(;`KN2&P1.$ZZ"C1/[P`,8#Q(;`<J2&P+&DAL$3A.N@H>3^\`N
- XM#&`F1^P'+F`,(%-A`.W280#N'%B+""P````/9@1*DV;H<``B`&$`Y1!![!$X]
- XM80#ML'!X<A1A`.4`)E].74YU3E7_X$CG#S(F2"M!_^@N`"P'4H9Z`2('Y8$@[
- XM2]'!*T#_Y"](`!P@4$ZZ$B8H`&``!5`B;P`<(%'1Q21(<``0$@1``#!M``4J-
- XM#$``2VP`!2+00#`[``9.^P`$!08%!@4&!08%!@4&!08%%`44!10%%`44!10%@
- XM%`44`)0%%`">`*H`\@#\`0@!$@%6`6`!:@44`70!@`',`=8"7`+B`NX#!`,64
- XM`R`%%`,J`S8#0`.>`_0%%`44!10%%`44!10$``0*!!0$(`0J!#0%%`0^!$@%S
- XM%`12!&($;`1V!(`$B@24!)X$I@2N`)0$M@44!+X%%`3^<`!A`/Z*8``$A@"L5
- XM`<`````,8``$>DHJ``%G$D'J``%#[``H80#RG"H$8``$8BX&4H<@+?_HL(=LC
- XM#AE2!RH@/``!U,IA`/Y((`;E@"!S"`!#[``H80#R;"P'8``$,@CL``,`#&``T
- XM!"@`K``#````#&``!!P(K``!``]@``022BH``6<,0>H``2E(!X8J!&`F+@92M
- XMAR`M_^BPAVP.&5('*B`\``'4RF$`_>8@!N6`*7,(``>&+`<`K`(``"``#&``P
- XM`\X([``'``Q@``/$".P`!@`.8``#N@CL``<`#F```[``K"```"``#&```Z1*)
- XM*@`!9Q!!Z@`!0^P`(&$`\<8J!&`L+@92AR`M_^BPAVP.&5('*B`\``'4RF$`9
- XM_70@!N6`(',(`$/L`"!A`/&8+`<([``$``]@``-8".P`!0`-8``#3DHJ``%G8
- XM,D'J``%#[`O<80#\T$J`9AXB;P`<(%'1Q4/H``%P_R!)80#C$"`L`"1R%&$`2
- XMXI0J!&!$+@92AR`M_^BPAVP.&5('*B`\``'4RF$`_/P@!N6`)$O5P"!20^P+E
- XMW&$`_'Y*@&82</\@4F$`XLH@+``D<A1A`.).+`<([``#``U@``+(2BH``6<R=
- XM0>H``4/L"]!A`/Q*2H!F'B)O`!P@4='%0^@``7#_($EA`.**("P`)'(480#BI
- XM#BH$8$0N!E*'("W_Z+"';`X94@<J(#P``=3*80#\=B`&Y8`D2]7`(%)#[`O0'
- XM80#[^$J`9A)P_R!280#B1"`L`"1R%&$`X<@L!PCL``(`#6```D(`K```""``L
- XM#&```C:3R2QX``1.KO[:($`A;`OP`+A@``(@*7Q_____`"`([``$``]@``(.6
- XM".P``0`-8``"!`CL``4`#F```?H`K$```"``#&```>X([``#`!-@``'D2BH`T
- XM`6<00>H``4/L`#!A`/`&*@1@+"X&4H<@+?_HL(=L#AE2!RH@/``!U,IA`/NTM
- XM(`;E@"!S"`!#[``P80#OV"P'("P`,'(,L(%M"@R````!+&\``8Y"K``P8``!X
- XMADHJ``%G$$'J``%#[``L80#OJ"H$8"PN!E*'("W_Z+"';`X94@<J(#P``=3*T
- XM80#[5B`&Y8`@<P@`0^P`+&$`[WHL!PRL````!``L;``!.$*L`"Q@``$P`*P`4
- XM`(`"``Q@``$D".P`!@`-8``!&@CL``(`$V```1!P4-"`@:P`#&```00(K``#T
- XM``]@``#Z&7P`90;P8```\`BL``(`#V```.8([`````Q@``#<".P`!P`-8```8
- XMTG`#*4`,(`CL``4`#&```,(([``%``]@``"X".P`!``-8```K@CL``8`#V``=
- XM`*0([``!``Q@``":".P`!``,8```D`CL``4`$V```(8([``!``Y@?'`!*4`,*
- XM(&!T<`(I0`P@8&P([``"``Q@9$HJ``%G#$'J``$I2!+T*@1@)BX&4H<@+?_H-
- XML(=L#AE2!RH@/``!U,IA`/HZ(`;E@"ES"``2]"P'".P`!``.8"0([``&`!-@\
- XM''``$!)R,)"!*4``&&`.&5('*B`\``'4P&$`^@)2A;J$;0#ZKB`&3-],\$Y=<
- XM3G5.5?]L2.<A,BM(_W"3R2QX``1.KO[:)D`I:P"X"_!P_R=``+A(;?]X(&W_`
- XM<$/M_W1A`/B<6$\L;!0X3J[_RBE`"^Q.KO_$*4`+Z"(`3J[_*$J`9Q0@+`OL@
- XM(@!.KO\H2H!G!@CL``$`#R`\```!!$ZZ`Z`I0``$9@IP9T'L!R=A`-]:<"1.7
- XMN@.**4``"&8*<&=![`<G80#?1'X!<``I0`P`*4`+]"E`"_PI0`OX*4`,""E`L
- XM#`0@:P"80^P,B$ZZ"FR^K?]T;'`@!^6`0>W_>-'`(E!P+;`19EYP`L"L``P`N
- XM0``,*4``#$*L`!!![`7B*4@'ABE\?____P`@(`?E@$'M_W@B2-/`)%%**@`!J
- XM9@12AV`D(`<B+?]T80#Y5BX`OJW_=&P2(`?E@$'M_WC1P")0<"VP$6?$("P`S
- XM$`)`__X"0/_]`D#_[RE``!!P`!E`$`P90`[@OJW_=&P``3X([`````X@!^6`Y
- XM0>W_>-'`+T@`%$'L#;0B;P`4(E%.N@M\4H=![`VT3KH&JDJ`9UI![!`,0^P-E
- XMM$ZZ"3!![`[@0^P0#$ZZ"U9![`VT(DA.N@C<0>P-M$ZZ!GQ*@&<60>P.X$/L1
- XM#;1.N@D"0>P-M")(3KH(N@@L``,`$V8:".P``@`.".P````38`P(K``"``X(#
- XMK````!-![`[@3KH*R'(?L(%N#D'L$`Q.N@JZ<A^P@6\@(#P``=340>P')V$`9
- XMW<`(+``%`!-G``',<'AR%&$`W3Q![`VT3KH%_$J`9R@@!^6`0>W_=-'`(#P`O
- XM`=3>(%!A`-V,""P`!0`39P`!F'!X<A1A`-T(0>P-M"((=/XL;!0X3J[_K"E`K
- XM``!F)G#_0>P-M&$`W5H(+``%`!-G``%F("P`)'(480#<U&`&*6L`F```<#I!?
- XM[`VT3KH(<DJ`9@P@;```0^P-M$ZZ"'1![`VT*4@2\!`L#N!*`&8,<BH900[@6
- XM<``90`[A$"P0#$H`9@IR*AE!$`Q"+!`-$"P0#'(NL`%G$!`L#N"P`6<($"P-:
- XMM+`!9@8([``&``T@+``<L*P`(&<,(&P``$/L#;1A`/(T2JP``&<6""P````.G
- XM9PX@+```(@`L;!0X3J[_ID*L``!A`.4@""P````/9@``J+ZM_W1L(`@L``8`Q
- XM#F88""P``0`39A`(+``$`!-F"$'L!R9A`.3(OJW_=&UZ""P`!0`.9W(@+`OT:
- XM<@&P@6=H2JP,`&=B2H!G.D'L!OYA`.7"0>P&=V$`Y'!![`;Q80#ELB\L#`@O[
- XM+`P$+RP+_"\L"_A(;`8.2&P1.$ZZ`(9/[P`88!PO+`P(+RP,!"\L"_Q(;`9#:
- XM2&P1.$ZZ`&A/[P`40>P1.&$`Y"*^K?]T;`H(+`````]G`/S"<``B`&$`VV),4
- XMWTR$3EU.=4CG(`)8@"0`<@`L>0````1.KO\Z2H!G!BQ`+,(@#DS?0`1.=2\.H
- XM0^C__"`1+'D````$3J[_+BQ?3G5.50``2.?@\B!M``Q#[0`01?D``"9N)FT`9
- XM""QY````!$ZN_?9,WT\'3EU.=1;`3G5.5?_42.<X(BM(__@K2?_\+&P4.$ZN@
- XM_\HB`$ZN_RA*@&<H3J[_Q"(`3J[_*$J`9QJ3R2QY````!$ZN_MH@0"MH`*3_E
- XM]$JM__1F"'(7=$U@``%$>`!P`"!`3KD``"AR*T#_[&<``3QP1$ZY```F""M`R
- XM__!G``"$)&W_[")`(&W_]'`!3KD``"@:+&P4.$ZN_\0B`'8$0>P'(B0(+&P4?
- XM.$ZN_]`,@`````1F```L)#P``"<03J[_RB(`3J[_-$J`9P``%DZN_\HB`'80&
- XM0>W_V"0(3J[_UB@`)&W_[")M__`@;?_T<`!.N0``*!H@+?_P9P@@0$ZY```F5
- XM+"`M_^QG``"B3KD``"C\#(0````);P``DD7M_]@,*@`[``1F``"$##(`<D#_)
- XM9@``>EI*<@`2&@1!`#`,$@`[9QK"_``*TAH$`0`P#!(`.V<*POP`"M(:!`$`=
- XM,%)*=``4&@P"`"!G``!"#`(`.V<``#H,`@!R9P``,@0"`#`,$@`@9QK$_``*'
- XMU!H$`@`P#!(`(&<*Q/P`"M02!`(`,"!M__P@@2!M__@@@DS?1!Q.74YU2.<`P
- XM-B9(*DE![0`4*T@`"D'M```K2``4*TH`&"M\```#X@`<2D!G```,*WS_____@
- XM`"A@!$*M`"@@2R)-+'D````$3J[^DB!*3J[^@"!*3J[^C$S?;`!.=4CG!28JD
- XM2"H`</\L>0````1.KOZV#(#_____9@9P`&```&0N`'`B3KD``"8(2H!F#"`'Z
- XM3J[^L'``8```2B1`)4T`"A5%``D5?``$``@5?`````X51P`/D\E.KO[:)4``#
- XM$+O\`````&<*(DI.KOZ>(`I@$D'J`!0@B%B00J@`!"%(``@@"DS?9*!.=4CG1
- XM``8J0"QY````!$JM``IG!B)`3J[^F!M\`/\`""M\_____P`4<``0+0`/3J[^&
- XML"!-3KD``"8L3-]@`$YU3E4``$CG'S(F22)(?DXJ$6T``,"*_`6U(`5(Q>6-8
- XMWH5(0#H`2D5GP\`6TP!P)```-F`E)&ND9M!II&4H=@Y'@`?`!214'L!=8<T
- XM,$``#$0``68*,`<"0``#9@)21KI&;PJ:1E)$#$0`#&W>#(<```!C;P@$AP``[
- XM`&1@\"`I``B`_``R2,`O`"`I``0B`(#\`#QV`#8`P/P`/))`+P$O`TAL!<0O5
- XM+0`(3KD``"9"3^\`%"\%4D0O!"\'2&P%LB\+3KD``"9"3^\`%$S?3/A.74YUL
- XM0^P%J2!M``A.N0``+O!#[`6@($M.N0``+O!@W'``$!AG#@P``"IG!@P``#]F8
- XM\'`!3G5.5?_`2.<P,"0L``PD2"9)0>W_P$/M_\1V`$H29@9*$V<``)X,$P`J5
- XM9D(,0P!`9P``E"&+,``CBC``4$-22V#:44,@"$I#;0P@<3@`2A!F!%%#8/!*2
- XM0VUL($`F<#``4DM2L3``)'$X`%!#8*X,$P`_9@I*$F8Z2D-G2F#$$!(2$P@"]
- XM`!5G(`P``$!C"@P``%IB!`8``"`,`0!`8PH,`0!:8@0&`0`@L@!G!DI#9Q9@^
- XMD$H29P)22DH39P922V``_UQP`6`"<`!,WPP,3EU.=4CG,"`D`"8L``P(`P`1D
- XM9R(@*``$L*D`!&T&9Q9P`&`"<`$(`P`09P``G@A```!@``"6"`,`!F8``()*&
- XM0F9`0>@`"$/I``A*$&<N$AD0&`@#`!1G(`P!`$!C"@P!`%IB!`8!`"`,``!`O
- XM8PH,``!:8@0&```@L@!GSI`!;CI@/%-"9@X@*`!\L*D`?&TJ;BQ@KE-"9A9!.
- XMZ`"$0^D`A$ZY```KV$J`;1!N$F"4("@``+"I``!GBFT$<`%@`G``"`,`"6<$F
- XM"$```$S?!`Q.=2`H``"0J0``9A0@*``$D*D`!,'\"[C0J``(D*D`"$YU2.<@=
- XM-B0L#"`F2"1)*FL``$JM``!G&B)J``@@;0`((`).N0``*PQ*0&8&*FT``@P
- XM($LB2B1M``0L>0````1.KO\63-]L!$YU2.<`-B1()DE.N0``"=Y*@&<D*D`@1
- XM/````00B;0`(($LL>0````1.KOV0(DT@2DZY```K^'`!3-]L`$YU<`!.=2\*O
- XM<``D24H99OP2(0P!`#IG'`P!`"]F$+/*9Q(,*0`O__]G"E-)8`:SRF+>8`JSV
- XMRF4&$-I20V0A`D7TYU+PIP`"1)2AEF_!(A#`$`.F<,#`$`+V<&L\IB[F`"_
- XM4DD0V6<$4D!@^"1?3G53@&T$$-EF^$(0(`A.=;/(90S0P-+`$R!30&[Z8`82;
- XMV%-`;OI.=;`09PI*&&<"8/9P`$YU(`A.=4CG/3(F""1)0A)Z`"`\```!!$ZYU
- XM```F""X`9P``E"QL%#A*@V=.(@,D!TZN_YI*@&=^(D<,*0`@``AE'DH29PQ#L
- XM[`:#($I.N0``+>XB1T/I``@@2DZY```M[B@#(@-.KO\N)@!*168$>@%@MB($Y
- XM3J[_IF"N(D<,*0`@``AD#D/L!H4@2DZY```M[F`J<"\@2DZY```M$$J`9P@@=
- XM0!"\`#I@%$/L!H$@2DZY```NX&`&0A)V`&`"=@%*AV<(($=.N0``)BP@`TS?&
- XM3+Q.=4CG`3`F221(($M.N0``+K@N`"!*3KD``"ZX4D`B2M+'($I.N0``+/@P_
- XM!R)*($M.N0``+/A,WPR`3G4,``!A;0H,``!Z;@0$```@3G4``$Y5__Q(YP,P&
- XM)D@D22X`2H=G,DH39RY*$F<J<``0&TZZ_\QR`!(:+T``$"`!3KK_OB(O`!"2V
- XM@"P!2H9G!"`&8!I3AV#*2H=G$$H39P1P`6`*2A)G!'#_8`)P`$S?#,!.74YUD
- XM```B"&`$$-EG"%.`9/A@!D(84X!D^B`!3G4@"$H89OQ32)'`(`A.=0``$ABR)
- XM&68(2@%F]G``3G5N!'#_3G5P`4YU(`A*&&;\4X@0V6;\3G4``$CG`#`F2"1)(
- XM$!H6@$H`9P12BV#T(`M,WPP`3G5.5?_X2.<!,"9()$E^`$H39RHK2O_\(&W_(
- XM_$H09PP0$+`39P92K?_\8.P@;?_\2A!F!"`'8`A2AU*+8-(@!TS?#(!.74YUN
- XM3E7_^$CG`3`F2"1)?@!*$V<B*TK__"!M__Q*$&<0$!"P$V8$(`=@#E*M__Q@^
- XMZ%*'4HM@VB`'3-\,@$Y=3G5(YP`P)D@D22!+(DIA`/]N3-\,`$YU2.<`,"9(*
- XM)$D@2R)*89Y,WPP`3G4``$CG`Q`N`$?L"UP@"V<P""L``@`;9B0(*P`!`!MG9
- XM'"`K``20JP`0+`!*AF<.("L`'"(&(&L`$$ZZ_(@F4V#,(`=.N@#V3-\(P$YU=
- XM``````````!P84CG,``D`"8!2$)(0\3!QL#`P=1#2$)"0M""3-\`#$YU2H!J!
- XM```>1(!*@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``!D2`G
- XM3G4O`DA!-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?3G4O3
- XM`W80#$$`@&0```;AF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K```&4
- XMXYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`,@-(A
- XM0^>X2$#!028?)!].=4CG!P`N`"`L"UA3@"P`2D9K+B`&2,#G@$'L$O@J,`@`@
- XM2@5G&`@%``1F$B`&2,#G@$'L$O@@,`@$3KK[3E-&8,X@!TZZS^1,WP#@3G4`'
- XM```````````````@B%B00J@`!"%(``A.=0``(`@0V6;\3G4```/L````(0``X
- XM`````"X$```M^@``+<P``"Q*```J(@``*A8``"X>```N$@``+>(``"VT```M]
- XMJ```+7@``"UJ```M-@``+'```"P:```KJ@``*?P``"GD```I,```*)H``"=TF
- XM```G9@``)U@``";V```FW```)LP``"94````V@```1````#R```!!@```20`?
- XM```!`````0````8````````#\@```^H```,7````````````````````#```0
- XM``````````````````!_____`````````````````````)LS,VUL<R!V-"XPQ
- XM:YLP;2`@J2!#;W!Y<FEG:'0@($MI;2!%+B!$959A=6=H;B`@,#4O,3$O.3`@Y
- XM(%MN;VXM:R!R979S.B!*+B!-8T-O<FUI8VM="@!U<V%G93H@;',@6R!;+6]P?
- XM=&EO;G,@/&%R9W,^72`@6VYA;65S72!=("XN+@H`("!A("!3:&]W(&1O="!F]
- XM:6QE<R`@("`@("!S("!3;W)T(&)Y('-I>F4@("`@("`@("`@($T@($EG;F]RJ
- XM92!C87-E('<O=VEL9&-A<F0*`"`@8B`@4VAO=R!D871A(&)L:W,@("`@("`@D
- XM="`@4V]R="!B>2!D871E("`@("`@("`@("!.(#QN86UE/B!3:&]W(&YE=V5R`
- XM('1H86X*`"`@8R`@4VAO=R!F:6QE;F]T97,@("`@("`@=2`@57-A9V4@(%MA(
- XM;'-O("T_72`@("`@("!/(#QN86UE/B!3:&]W(&]L9&5R('1H86X*`"`@9"`@1
- XM4VAO=R!D:7)S(&]N;'D@("`@("`@=B`@5F%R:2!C;VP@<VAO<G0@;&ES="`@'
- XM("!0("!3:&]W(&9U;&P@<&%T:&YA;65S"@`@(&4@($5X96-U=&4@8FET(&ES"
- XM(")E(B`@('@@/'!A=#X@17AC;'5D92!F:6QE<R`@("`@42`@4F5Q=65S=&5R.
- XM<R!E;F%B;&5D"@`@(&8@(%-H;W<@9FEL97,@;VYL>2`@("`@('H@($]V97)R,
- XM:61E(&)L:R!C86QC("`@("`@4B`@4F5C=7)S:79E(&QI<W1I;F<*`"`@:"`@4
- XM4VAO=R!H:61D96X@9FEL97,@("`@02`@4VAO=R!A;&P@(%L]("UA:&E=("`@O
- XM("!3("!3:&]W(&1I<G,@9FER<W0*`"`@:2`@4VAO=R`J+FEN9F\@9FEL97,@9
- XM("`@0B`\8FQK/B!&;W)C92!B;&L@<VEZ92`@("!4("!4;W1A;',@9F]R(&%L7
- XM;"!E;G1R:65S"@`@(&L@(%-O<G0@8GD@9&ES:R!K97D@("`@($,@(%-I;F=LR
- XM92!C;VQU;6X@;&ES="`@("`@5B`@4VAO=R!R96P@<&%T:&YA;65S"@`@(&P@@
- XM($QO;F<@;&ES=&EN9R`@("`@("`@($0@(%-H;W<@9&ER<R!L87-T("`@("`@U
- XM("`@5R`@3F\@8V]N=&5N=',@*'=I;&0@9&ER*0H`("!M("!-:7AE9"!C87-EL
- XM(&]U='!U="`@("!%("!.;R!!3E-)(&5S8V%P92!C;V1E<R`@(%@@/'=I9&4^8
- XM(%-E="!O=71P=70@8V]L<PH`("!N("!.;R!S;W)T("`@("`@("`@("`@("!'2
- XM("!.;R!S=6)D:7(@=&]T86QS("`@("`@(%D@/&AI9V@^(%-E="!O=71P=70@-
- XM<F]W<PH`("!O("!/;&0@;&]N9R!L:7-T(&9M="`@("!(("!.;R!H96%D:6YGK
- XM<R`@("`@("`@("`@(%H@($9O<F-E($%.4TD@<V5Q=65N8V5S"@`@('`@($%P>
- XM<&5N9"`B+R(@=&\@9&ER<R`@($D@($YO('!A9V4@<')O;7!T<R`@("`@("`PW
- XM+38@1&%T92!F;W)M870@*&YE=R!L;VYG*0H`("!Q("!1=6ET(&]N(&YO="!F'
- XM;W5N9"`@("!+("!3:&]W(&1I<VL@:V5Y<R`@("`@("`@("T@($YE>'0@87)G/
- XM(&ES(&9I;&5N86UE"@`@('(@(%)E=F5R<V4@<V]R="`@("`@("`@($P@/&X^1
- XM($QI;6ET960@<F5C=7)S:6]N"@`@($8@/&9O<FUA=#X@1F]R;6%T(&]U='!U[
- XM="!;+6\@9FUT72`H9&5F875L=#H@(@`B*0H`,#`M,#`M,#``,#`Z,#`Z,#``;
- XM)3`R;&0M)3`R;&0M)3`R;&0`)3`R;&0Z)3`R;&0Z)3`R;&0`'QP?'A\>'Q\>I
- XM'QX?)7`@)60@)70@)31B("4X<R`E;EQN`````````````````````````"5LL
- XM9`!$:7)S.B`E+31L9"!&:6QE<SH@)2TU;&0@0FQO8VMS.B`E+35L9"!">71E-
- XM<SH@)2TX;&0*`"`@("`@("`@("`@1FEL97,Z("4M-6QD($)L;V-K<SH@)2TU4
- XM;&0@0GET97,Z("4M.&QD"@`*5&]T86QS.@H`.@`O`%)!33H```!*86X`1F5BC
- XM`$UA<@!!<'(`36%Y`$IU;@!*=6P`075G`%-E<`!/8W0`3F]V`$1E8P````:*\
- XM```&C```!I````:4```&F```!IP```:@```&I```!J@```:L```&L```!K0`B
- XM``:X>)LP;0";,"!P`)L@<`";,S-M`)LQ.S,S.S0P;0";,3LS,3LT,&T`FS<[?
- XM,S-MFS`@<`";,"!Q"@`````````````T````B0```+<```$&```!5````:(`'
- XM``'N```".0```H,```++```#&@```V4```.T```$`@``!%````2=```$[```C
- XM!3D```5L```%X@``!9P````````%XCH`;',Z($]U="!O9B!M96UO<GD*```EF
- XM<SH@1FEL92!O<B!D:7)E8W1O<GD@:6X@=7-E"@`E<SH@3F\@<W5C:"!F:6QES
- XM(&]R(&1I<F5C=&]R>0H``"!&:6QE<WES=&5M(&YO="!V86QI9&%T960*```@N
- XM1&5V:6-E(&YO="!M;W5N=&5D(&]R(&%S<VEG;F5D"@``($EN=F%L:60@9FEL8
- XM97-Y<W1E;2!F;W)M870@6VYO;BU$3U-="@`@1&5V:6-E(&5M<'1Y"@``;',Z5
- XM($1I<F5C=&]R>2!O<B!F:6QE;F%M92!P871T97)N('1O;R!L;VYG"@`E<SH@3
- XM56YA8FQE('1O('!A='1E<FX@;6%T8V@@<&%T:',*``!L<SH@)7,Z($5R<F]RD
- XM("T@)6QD"@``)7,@)3)L9"`E-6QD```E<R`E,FQD("4P,FQD.B4P,FQD````\
- XM)7,@)3`R;&0@)31L9"`@)3`R;&0Z)3`R;&0Z)3`R;&0``"4P,FQD+25S+24PO
- XM,FQD("4P,FQD.B4P,FQD.B4P,FQD```E,#)L9"TE,#)L9"TE,#)L9"`E,#)L-
- XM9#HE,#)L9#HE,#)L9````"4P,FQD+R4P,FQD+R4P,FQD("4P,FQD.B4P,FQDQ
- XM.B4P,FQD````)3`R;&0O)3`R;&0O)3`R;&0@)3`R;&0Z)3`R;&0Z)3`R;&0`-
- XM```E,#)L9"XE,#)L9"XE,#)L9"`E,#)L9#HE,#)L9#HE,#)L9``````````*$
- XM;',Z('=A<FYI;F<@*"5L9"DZ(&)L;V-K(&-O=6YT*',I(&UA>2!B92!I;F%C0
- XM8W5R871E("T@<V5E(&QS+F1O8PH*`"`@```@8P``("4V;&0`("4U;&0@)3ALF
- XM9"`@```@(```+P`O``H`(B5S(@H`FS!MFR!P*BI"4D5!2PH``"!-;W)E("@EX
- XM;&0@;V8@)6QD*2`N+BX@`$UO<F4@+BXN(`";,"!PFT:;2P``(``O*B`E<R`J'
- XM+PH`8VAS<&%R=S=D`#``,0!$:7(`*BYI;F9O```N*@``3F\@;6%T8V@N"@``*
- XM=&]T86P@,`H``&QS.B!$979I8V4@96UP='D@;W(@;F]T(&UO=6YT960*``!L:
- XM<SH@17AA;6EN92!F86EL960@+2!);T5R<B`E;&0*`#H*``!L<SH@:6QL96=AQ
- XM;"!O<'1I;VX@+2T@)7,@("`@6RUU(&9O<B!U<V%G95T*`&QS.B!R97%U:7)E-
- XM9"!A<F<@;6ES<VEN9R!O;B!O<'1I;VX@+2T@)7,@("`@6RUU(&9O<B!U<V%GT
- XM95T*````````*```"WX`````````````````````````````````````````]
- XM``N@````````````````````````````````````````````````````````K
- XM````````````````````````````````````)0``!X8```=^```'>@``!W8`U
- XM``=R```';@``!VH```=F```'8@``!UX```=:```'5@``!U(```=.```'2@``7
- XM!T8```="```'/@``!SH```<V```',@``!RX```;L```&Z```!N0```;@```&]
- XMW```!M@```;4```&T```!LP```;(```&Q```!L````:\```+?@``"UP```/L[
- X(`````````_+4)
- X``
- Xend
- Xsize 16028
- END_OF_FILE
- if test 22474 -ne `wc -c <'ls.uu'`; then
- echo shar: \"'ls.uu'\" unpacked with wrong size!
- fi
- # end of 'ls.uu'
- fi
- if test -f 'src/ls.c.ab' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/ls.c.ab'\"
- else
- echo shar: Extracting \"'src/ls.c.ab'\" \(20364 characters\)
- sed "s/^X//" >'src/ls.c.ab' <<'END_OF_FILE'
- X
- XGOODRET:
- X FreeAllFibs (fibhead);
- X return (dirhead);
- X
- XBADALLOC:
- X FreeAllFibs (fibhead);
- X FreeAllFibs (dirhead);
- X return (0L);
- X}
- X
- X
- X/* --------------------------------------------------------------------
- X * Given a directory name and a lock on that directory, create a list
- X * of entries. Recursively decends into subdirectories if flaged.
- X * -------------------------------------------------------------------- */
- XVOID DirIt (curlock, dirname)
- X struct FileLock *curlock;
- X BYTE *dirname;
- X{
- X BYTE *matchpath;
- X BYTE *subdir;
- X LONG dnamlen;
- X LONG errcode;
- X LONG len;
- X LONG tmpflags;
- X BYTE tmpdpat[MAXFNLEN+2];
- X BYTE tmpfpat[MAXFNLEN+2];
- X struct FibEntry *tfibp;
- X struct FileLock *sublock;
- X struct List *fibheadp;
- X
- X/* Try to fill FileInfoBlock, bomb if not readable for some reason */
- X if (Examine((BPTR)curlock, GFibp) == 0)
- X {
- X if ((errcode = IoErr()) == ERROR_DEVICE_NOT_MOUNTED)
- X asprintf(workstr, "ls: Device empty or not mounted\n");
- X else
- X asprintf(workstr, "ls: Examine failed - IoErr %ld\n", errcode);
- X WSTR(workstr);
- X return;
- X }
- X
- X recurlevel++;
- X
- X/* Put directory header for each listing, if headers on and we know the name */
- X if ((GFibp->fib_DirEntryType > 0) && ((LSFlags & NOHEADERS) == 0) && (dirname[0] != 0))
- X {
- X /* Put directory header for each listing, if recursive and not top dir */
- X if ((recurlevel > 1) && (strcmp(dirname, thePath) != 0))
- X {
- X strcpy(workstr, dirname);
- X
- X len = 0;
- X if ((LSFlags & FULLPATHNAMES) == 0)
- X {
- X if ((strnicmp(initialpath, thePath, strlen(thePath)) == 0) ||
- X (strnicmp(thePath, initialpath, strlen(initialpath)) == 0))
- X {
- X if (strlen(thePath) <= strlen(initialpath))
- X matchpath = thePath;
- X else
- X matchpath = initialpath;
- X len = strlen(matchpath);
- X if ((strnicmp(workstr, matchpath, len) == 0) && (len < strlen(workstr)))
- X {
- X if (*(workstr + len) == '/')
- X len++;
- X }
- X else
- X len = 0;
- X }
- X }
- X strcat(workstr, ":\n");
- X
- X SetConPen(penstr3);
- X WSTR(workstr + len);
- X SetConPen(penstr0);
- X }
- X }
- X
- X/* If this is a single file list it verbosely */
- X if (GFibp->fib_DirEntryType < 0)
- X {
- X if ((LSFlags & SHOWFILES) != 0)
- X {
- X GetPathString(thePath, thePath);
- X fixNumBlocks(curlock, GFibp);
- X
- X if ((LSFlags & OLDLONGFORMAT) != 0)
- X LListEntry(GFibp);
- X else
- X llistentry(GFibp);
- X
- X gfilecount++; gitemcnt++;
- X gtotblocks += blkalloc(GFibp);
- X gtotbytes += GFibp->fib_Size;
- X
- X LSFlagsX |= SINGLEFILEFLAG;
- X }
- X }
- X else /* It is a directory entry */
- X {
- X tmpflags = LSFlags;
- X if ((LSFlags & WILDPATH) != 0)
- X LSFlags |= SEPFILESDIRS | FILESFIRST;
- X
- X /* Allocate, fill, and display a dir of entries, check for no ram or abort */
- X if ((fibheadp = GetDir (curlock, GFibp)) != 0)
- X {
- X
- X /* Recursively descend any subdirs in this list, if wanted or a wild path */
- X LSFlags = tmpflags;
- X if (((LSFlags & LISTALL) != 0) || ((LSFlags & WILDPATH) != 0))
- X {
- X LSFlags &= ~WILDPATH;
- X for (tfibp = (struct FibEntry *)fibheadp->lh_Head;
- X tfibp->fe_Node.mln_Succ != 0;
- X tfibp = (struct FibEntry *)tfibp->fe_Node.mln_Succ)
- X {
- X TestBreak ();
- X if ((LSFlags & BREAKFLAG) != 0)
- X break;
- X
- X if (tfibp->fe_Fib->fib_DirEntryType > 0)
- X {
- X /* Alloc length of path + 1 + newdir name +1 + length of maxname + 1 for NULL
- X * + 1 for null + 3 for rounding.
- X */
- X dnamlen = (LONG)(strlen (dirname) + strlen (tfibp->fe_Fib->fib_FileName) + 36);
- X if ((subdir = myalloc ((LONG)dnamlen)) != 0)
- X {
- X if (dirname[0] != 0)
- X {
- X (VOID) stpcpy (subdir, dirname);
- X dnamlen = strlen (dirname) - 1;
- X if (dirname[dnamlen] != ':' && dirname[dnamlen] != '/')
- X {
- X (VOID) strcat (subdir, SlashStr);
- X }
- X }
- X (VOID) strcat (subdir, tfibp->fe_Fib->fib_FileName);
- X
- X if ((recurlevel != recurlimit) &&
- X ((sublock = (struct FileLock *)Lock(subdir, (LONG)ACCESS_READ)) != 0))
- X {
- X if ((LSFlags & NOHEADERS) == 0)
- X WCHR(NLine); /* Put a blank line between directories */
- X
- X curpath = subdir;
- X
- X if ((LSFlagsX & WILDPATHFLAG) != 0)
- X {
- X strcpy(tmpdpat, theDirPat);
- X theDirPat[0] = '*'; theDirPat[1] = '\0';
- X strcpy(tmpfpat, theFilePat);
- X theFilePat[0] = '*'; theFilePat[1] = '\0';
- X }
- X
- X DirIt(sublock, subdir); /* Recurse into this subdirectory */
- X
- X if ((LSFlagsX & WILDPATHFLAG) != 0)
- X {
- X strcpy(theDirPat, tmpdpat);
- X strcpy(theFilePat, tmpfpat);
- X }
- X
- X UnLock((BPTR)sublock); /* Unlock our sublock */
- X }
- X myfree(subdir); /* Free the current namespace */
- X }
- X }
- X }
- X }
- X LSFlags = tmpflags;
- X /* Free up this fib list */
- X FreeAllFibs(fibheadp);
- X }
- X LSFlags = tmpflags;
- X }
- X recurlevel--;
- X}
- X
- X
- X/* -------------------------------------------------------------------- */
- XVOID GetCLIArgs (line, argc, argv)
- X BYTE *line;
- X LONG *argc;
- X BYTE **argv;
- X{
- X BYTE **pargv, *qarg;
- X
- X *argc = 0;
- X while (*argc < MAXARG)
- X {
- X while (*line == ' ' || *line == '\t' || *line == '\n')
- X line++;
- X if (*line == 0)
- X break;
- X pargv = &argv[*argc];
- X *argc += 1;
- X
- X if (*line == '"')
- X {
- X qarg = line;
- X line += 1;
- X *pargv = line; /* ptr inside quoted string */
- X while (*line != 0 && *line != '"')
- X line++;
- X if (*line == 0) /* Hit end of string without quote! */
- X {
- X *pargv = qarg; /* Must be okay */
- X break;
- X }
- X else
- X *line++ = 0; /* terminate arg ontopof quote */
- X }
- X else /* non-quoted arg */
- X {
- X *pargv = line;
- X while (*line != 0 && !(*line == ' ' || *line == '\t' || *line == '\n'))
- X line++;
- X if (*line == 0)
- X break;
- X else
- X *line++ = 0; /* terminate arg */
- X }
- X } /* while */
- X}
- X
- X
- X/* -------------------------------------------------------------------- */
- XLONG GetFileDate(name, ptime)
- X char *name;
- X struct DateStamp *ptime;
- X{
- X LONG status;
- X struct FileLock *flock;
- X struct FileInfoBlock *fib;
- X
- X status = 0;
- X if ((fib = myalloc ((LONG)sizeof(struct FileInfoBlock))) != 0)
- X {
- X if ((flock = (struct FileLock *)Lock(name, (LONG)ACCESS_READ)) != 0)
- X {
- X if (Examine((BPTR)flock, fib) != 0)
- X {
- X *ptime = fib->fib_Date; /* Copy the Date structure */
- X status = 1;
- X }
- X UnLock((BPTR)flock);
- X }
- X myfree(fib);
- X }
- X return(status);
- X}
- X
- X
- X/* --------------------------------------------------------------------
- X * Trap for bad args, and/or explain how to use.
- X * -------------------------------------------------------------------- */
- XVOID Usage(errcode)
- X LONG errcode;
- X{
- X LONG i;
- X
- X switch(errcode)
- X {
- X case ILLEGAL_ARG:
- X asprintf(workstr, "ls: illegal option -- %s [-u for usage]\n", badopt);
- X break;
- X case MISSING_ARG:
- X asprintf(workstr, "ls: required arg missing on option -- %s [-u for usage]\n", badopt);
- X break;
- X default:
- X for (i = 0; ((LSFlags & BREAKFLAG) == 0) && (usagestrs[i] != 0); TestBreak(), i++)
- X WSTR(usagestrs[i]);
- X cleanup(0, 0);
- X }
- X WSTR(workstr);
- X cleanup(120L, 20L);
- X}
- X
- X
- X/* -------------------------------------------------------------------- */
- XLONG ParseCmdOptions(ncnt, argc, argv)
- X LONG ncnt, argc;
- X BYTE **argv;
- X{
- X LONG i, cnt, len;
- X struct Process *procp;
- X
- X cnt = ncnt; /* Current arg number that contains the options */
- X ncnt += 1; /* Advance to next arg */
- X
- X for (i = 1, len = strlen (argv[cnt]); i < len; i++)
- X {
- X switch (argv[cnt][i])
- X {
- X case '?':
- X case 'u':
- X Usage(SYNTAX);
- X break;
- X case 'A':
- X LSFlags |= MATCHDOTFILES | MATCHINFOFILES | SHOWHIDDEN;
- X break;
- X case 'B':
- X if (argv[cnt][i+1] != 0) /* Blocksize tail of same arg? */
- X {
- X (VOID) GetDecNum(&argv[cnt][i+1], &blksize); /* Yes */
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required blocksize number */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X (VOID) GetDecNum(argv[ncnt], &blksize);
- X ncnt += 1; /* Bump arg counter */
- X }
- X break;
- X case 'C':
- X LSFlags |= ONECOLFORMAT;
- X break;
- X case 'D':
- X LSFlags |= SEPFILESDIRS | FILESFIRST;
- X break;
- X case 'E':
- X LSFlags &= ~CONSOLE;
- X break;
- X case 'F':
- X if (argv[cnt][i+1] != 0) /* Format string tail of same arg? */
- X {
- X thefmtstr = &argv[cnt][i+1]; /* Yes */
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required format string */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X thefmtstr = argv[ncnt]; /* Else our format string is the next arg */
- X ncnt += 1; /* Bump arg counter */
- X }
- X LSFlags |= LONGLIST | OLDLONGFORMAT;
- X break;
- X case 'G':
- X LSFlags |= NODIRTOTAL;
- X break;
- X case 'H':
- X LSFlags |= NOHEADERS;
- X break;
- X case 'I':
- X LSFlags |= NOINTERACT;
- X break;
- X case 'K':
- X LSFlags |= SHOWDISKKEYS | LONGLIST;
- X break;
- X case 'L':
- X if (argv[cnt][i+1] != 0) /* Depth limit tail of same arg? */
- X {
- X (VOID) GetDecNum(&argv[cnt][i+1], &recurlimit); /* Yes */
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required depth number */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X (VOID) GetDecNum(argv[ncnt], &recurlimit);
- X ncnt += 1; /* Bump arg counter */
- X }
- X LSFlags |= LISTALL;
- X break;
- X case 'M':
- X LSFlags |= IGNORECASEWILD;
- X break;
- X case 'N':
- X if (argv[cnt][i+1] != 0) /* Filename string tail of same arg? */
- X {
- X if (GetFileDate(&argv[cnt][i+1], &thenewdate) == 0)
- X {
- X errmsg(&argv[cnt][i+1], -1L);
- X cleanup(ioerrcode, 20L);
- X }
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required name string */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X if (GetFileDate(argv[ncnt], &thenewdate) == 0)
- X {
- X errmsg(argv[ncnt], -1L);
- X cleanup(ioerrcode, 20L);
- X }
- X ncnt += 1; /* Bump arg counter */
- X }
- X LSFlags |= SHOWNEWERTHAN;
- X break;
- X case 'O':
- X if (argv[cnt][i+1] != 0) /* Filename string tail of same arg? */
- X {
- X if (GetFileDate(&argv[cnt][i+1], &theolddate) == 0)
- X {
- X errmsg(&argv[cnt][i+1], -1L);
- X cleanup(ioerrcode, 20L);
- X }
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required name string */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X if (GetFileDate(argv[ncnt], &theolddate) == 0)
- X {
- X errmsg(argv[ncnt], -1L);
- X cleanup(ioerrcode, 20L);
- X }
- X ncnt += 1; /* Bump arg counter */
- X }
- X LSFlags |= SHOWOLDERTHAN;
- X break;
- X case 'P':
- X LSFlags |= FULLPATHNAMES | LONGLIST;
- X break;
- X case 'Q':
- X procp = (struct Process *)FindTask(0L);
- X procp->pr_WindowPtr = OldWindowPtr;
- X break;
- X case 'R':
- X recurlimit = MAXDEPTH;
- X LSFlags |= LISTALL;
- X break;
- X case 'S':
- X LSFlags |= SEPFILESDIRS;
- X break;
- X case 'T':
- X LSFlags |= TOTALIZE;
- X break;
- X case 'V':
- X LSFlags |= RELPATHNAMES | LONGLIST;
- X break;
- X case 'W':
- X LSFlagsX |= NOWILDPATHDIRS;
- X break;
- X case 'X':
- X if (argv[cnt][i+1] != 0) /* Width tail of same arg? */
- X {
- X (VOID) GetDecNum(&argv[cnt][i+1], &CurWinCols); /* Yes */
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required width number */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X (VOID) GetDecNum(argv[ncnt], &CurWinCols);
- X ncnt += 1; /* Bump arg counter */
- X }
- X if ((CurWinCols < 12) || (CurWinCols > WORKSIZE)) CurWinCols = 0;
- X break;
- X case 'Y':
- X if (argv[cnt][i+1] != 0) /* Height tail of same arg? */
- X {
- X (VOID) GetDecNum(&argv[cnt][i+1], &CurWinRows); /* Yes */
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required height number */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X (VOID) GetDecNum(argv[ncnt], &CurWinRows);
- X ncnt += 1; /* Bump arg counter */
- X }
- X if (CurWinRows < 4) CurWinRows = 0;
- X break;
- X case 'Z':
- X LSFlags |= CONSOLE | NOINTERACT; /* special purpose hack - see docs */
- X break;
- X case 'a':
- X LSFlags |= MATCHDOTFILES;
- X break;
- X case 'b':
- X LSFlagsX |= DATABLKSONLY;
- X break;
- X case 'c':
- X LSFlags |= NOTEFLAG | LONGLIST;
- X break;
- X case 'd':
- X LSFlags &= ~SHOWFILES;
- X break;
- X case 'e':
- X exbit = 'e';
- X break;
- X case 'f':
- X LSFlags &= ~SHOWDIRS;
- X break;
- X case 'h':
- X LSFlags |= SHOWHIDDEN;
- X break;
- X case 'i':
- X LSFlags |= MATCHINFOFILES;
- X break;
- X case 'k':
- X sortkey = 3;
- X LSFlags |= SHOWDISKKEYS;
- X break;
- X case 'l':
- X LSFlags |= LONGLIST;
- X break;
- X case 'm':
- X LSFlags |= IGNORECASELIST;
- X break;
- X case 'n':
- X LSFlags |= NOSORTFLAG;
- X break;
- X case 'o':
- X LSFlags |= OLDLONGFORMAT;
- X break;
- X case 'p':
- X LSFlags |= ADDDIRSLASH;
- X break;
- X case 'q':
- X LSFlagsX |= NOTFOUNDHALT;
- X break;
- X case 'r':
- X LSFlags |= REVFLAG;
- X break;
- X case 's':
- X sortkey = 1;
- X break;
- X case 't':
- X sortkey = 2;
- X break;
- X case 'v':
- X LSFlags |= VARCOLSFORMAT;
- X break;
- X case 'x':
- X if (argv[cnt][i+1] != 0) /* Pattern tail of same arg? */
- X {
- X theAntiPat = &argv[cnt][i+1]; /* Yup */
- X i = len; /* Blow off rest of this arg */
- X }
- X else
- X {
- X if (argc < (ncnt + 1)) /* Missing required pattern string */
- X {
- X badopt[0] = argv[cnt][i];
- X Usage(MISSING_ARG);
- X }
- X theAntiPat = argv[ncnt]; /* Point to pattern area */
- X ncnt += 1; /* Skip over arg */
- X }
- X LSFlags |= ANTIMATCH; /* Set flag to use antipat */
- X break;
- X case 'z':
- X LSFlagsX |= NOFIXNUMBLOCKS; /* special purpose hack - see docs */
- X break;
- X case '0': /* AGE_TO_YEARS: MMM dD HH:MM or MMM dD YYYY */
- X case '1': /* FULL_FORM: MMM DD YYYY HH:MM:SS */
- X case '2': /* DASHA_FORM: DD-MMM-YY HH:MM:SS */
- X case '3': /* DASHN_FORM: MM-DD-YY HH:MM:SS */
- X case '4': /* SLASH_FORM: MM/DD/YY HH:MM:SS */
- X case '5': /* EURO_FORM: DD/MM/YY HH:MM:SS */
- X case '6': /* DOT_FORM: YY.MM.DD HH:MM:SS */
- X datefmt = argv[cnt][i] - '0';
- X break;
- X default:
- X badopt[0] = argv[cnt][i];
- X Usage(ILLEGAL_ARG);
- X }
- X }
- X return(ncnt);
- X}
- X
- X
- X/* -------------------------------------------------------------------- */
- XVOID _main (line)
- X BYTE *line;
- X{
- X BYTE *argv[MAXARG]; /* arg pointers */
- X LONG argc; /* arg count */
- X LONG cnt;
- X struct Process *procp;
- X
- X/* Prevent system request from occuring by default */
- X procp = (struct Process *)FindTask(0L);
- X OldWindowPtr = procp->pr_WindowPtr;
- X procp->pr_WindowPtr = SUPPRESS_ERR_REQ;
- X
- X/* Construct list of args */
- X GetCLIArgs(line, &argc, argv);
- X
- X/* Grab FileHandles for input and output to console (or redirection file) */
- X ConIn = (struct FileHandle *)Input();
- X ConOut = (struct FileHandle *)Output();
- X
- X/* Is this a CLI? Set a flag */
- X if ((IsInteractive((BPTR)ConOut) != 0) && (IsInteractive((BPTR)ConIn) != 0))
- X LSFlags |= CONSOLE;
- X
- X/* Allocate a global FileInfoBlock for ExNext() */
- X if ((GFibp = myalloc((LONG)sizeof(struct FileInfoBlock))) == 0)
- X errmsg(NULLSTR, ERROR_NO_FREE_STORE);
- X
- X/* Allocate a global ID for Info() */
- X if ((CurID = myalloc((LONG)sizeof(struct InfoData))) == 0)
- X errmsg(NULLSTR, ERROR_NO_FREE_STORE);
- X
- X/* Initialize arg count, zero grand totals */
- X cnt = 1;
- X gtotblocks = gtotbytes = gdircount = gfilecount = gentrycnt = gitemcnt= 0;
- X
- X/* Get the path of the dir we were in when invoked [NO ERROR CHECKING] */
- X MakePathString((struct FileLock *)procp->pr_CurrentDir, initialpath);
- X
- X/* Parse command line arguments, if any */
- X do
- X {
- X if ((cnt < argc) && (argv[cnt][0] == '-'))
- X {
- X /* Reset for next arg */
- X LSFlags &= CONSOLE;
- X LSFlags |= SHOWDIRS | SHOWFILES;
- X LSFlagsX = 0;
- X thefmtstr = deffmtstr;
- X recurlimit = MAXDEPTH;
- X
- X do
- X {
- X if (argv[cnt][1] == 0)
- X {
- X cnt++;
- X break;
- X }
- X cnt = ParseCmdOptions(cnt, argc, argv);
- X } while ((cnt < argc) && (argv[cnt][0] == '-'));
- X }
- X
- X LSFlagsX &= ~WILDPATHFLAG;
- X LSFlagsX &= ~SINGLEFILEFLAG;
- X LSFlagsX &= ~EMPTYDIRFLAG;
- X
- X theFilePat[0] = 0; /* Terminate pattern strings */
- X theDirPat[0] = 0;
- X
- X /* Is there an named path arg to do? */
- X if (cnt < argc)
- X {
- X LSFlags |= PATHNAMED; /* Flag that we have a name */
- X stpcpy(thePath, argv[cnt]); /* Copy this arg to work space */
- X cnt++; /* Advance arg counter */
- X
- X /* Wild pathname? Separate into components until we find a non-wild path */
- X if (iswild(thePath) != 0)
- X {
- X (VOID) GetFileString(theFilePat, thePath);
- X (VOID) stpcpy(theDirPat, theFilePat);
- X (VOID) GetPathString(thePath, thePath);
- X
- X /* Still wild? First part must be wild filename to match */
- X if (iswild (thePath) != 0)
- X {
- X (VOID) GetFileString(theDirPat, thePath);
- X (VOID) GetPathString(thePath, thePath);
- X }
- X
- X if ((LSFlagsX & NOWILDPATHDIRS) == 0)
- X {
- X LSFlags |= WILDPATH;
- X LSFlagsX |= WILDPATHFLAG;
- X }
- X }
- X else
- X {
- X LSFlags &= ~WILDPATH;
- X LSFlagsX &= ~WILDPATHFLAG;
- X }
- X
- X#ifdef DEBUGIT
- X asprintf(workstr, " thePath: %s\n", thePath); WSTR(workstr);
- X asprintf(workstr, " theDirPat: %s\n", theDirPat); WSTR(workstr);
- X asprintf(workstr, "theFilePat: %s\n", theFilePat); WSTR(workstr);
- X#endif
- X
- X /* Filenames and dir nodes currently limited to 30 chars under AmigaDOS */
- X if ((strlen(theDirPat) > MAXFNLEN+1) || (strlen(theFilePat) > MAXFNLEN+1))
- X {
- X errmsg(NULLSTR, PATTERN_ERR);
- X if ((LSFlagsX & NOTFOUNDHALT) != 0)
- X cleanup(120L, 20L);
- X else
- X continue;
- X }
- X
- X /* No wildcards allowed in the final pathname! */
- X if (iswild(thePath) != 0)
- X {
- X errmsg(argv[cnt-1], WILDSPEC_ERR);
- X if ((LSFlagsX & NOTFOUNDHALT) != 0)
- X cleanup(120L, 20L);
- X else
- X continue;
- X }
- X
- X /* Now try to lock the dir (or file) */
- X if ((CurFLock = (struct FileLock *)Lock(thePath, (LONG)ACCESS_READ)) == 0)
- X {
- X errmsg(thePath, -1L);
- X if ((LSFlagsX & NOTFOUNDHALT) != 0)
- X cleanup(ioerrcode, 20L);
- X else
- X continue;
- X }
- X }
- X else
- X {
- X /*
- X * If no filename was specified, steal Lock on current directory from
- X * CLI process task info. We durn well better get something useful back;
- X * since we don't do any error checking on the "borrowed" Lock.
- X */
- X CurFLock = (struct FileLock *)procp->pr_CurrentDir;
- X }
- X
- X /* Make a full pathname string from given CurFLock if no colon in path */
- X if (aindex(thePath, ':') == 0)
- X MakePathString(CurFLock, thePath);
- X curpath = thePath;
- X
- X#ifdef DEBUGIT
- X asprintf(workstr, "Final path: %s\n", thePath); WSTR(workstr);
- X#endif
- X
- X /* If there isn't a dir pattern or file pattern specified, match everything */
- X if (theDirPat[0] == 0)
- X {
- X theDirPat[0] = '*'; /* "*" default matchall dir pattern */
- X theDirPat[1] = 0; /* Null terminate string */
- X }
- X
- X if (theFilePat[0] == 0)
- X {
- X theFilePat[0] = '*';
- X theFilePat[1] = 0;
- X }
- X
- X /* Auto enable display of dot files, if explicitally specified as filespec */
- X if ((theFilePat[0] == '.') || (theDirPat[0] == '.') || (thePath[0] == '.'))
- X LSFlags |= MATCHDOTFILES;
- X
- X /* Get the directory for this path, display it */
- X if (recurlevel != recurlimit)
- X DirIt(CurFLock, thePath);
- X
- X /* Release the lock if we locked it */
- X if ((CurFLock != 0) && ((LSFlags & PATHNAMED) != 0))
- X UnLock((BPTR)CurFLock);
- X CurFLock = 0;
- X
- X TestBreak();
- X if ((LSFlags & BREAKFLAG) == 0)
- X {
- X /* Still more args and previous not a single file or empty dir? Put linefeed between listing outputs */
- X if ((cnt < argc) && ((LSFlags & NOHEADERS) == 0) && ((LSFlagsX & SINGLEFILEFLAG) == 0) &&
- X ((LSFlagsX & EMPTYDIRFLAG) == 0))
- X WCHR(NLine);
- X
- X if ((cnt >= argc) && ((LSFlags & TOTALIZE) != 0) && (gentrycnt != 1) && (gitemcnt != 0))
- X {
- X if (gentrycnt != 0)
- X {
- X SetConPen(penstr3);
- X WSTR(TotHeaderMsg);
- X SetConPen(penstr0);
- X asprintf(workstr, totalfmtstr, gdircount, gfilecount, gtotblocks, gtotbytes);
- X }
- X else
- X asprintf (workstr, filefmtstr, gfilecount, gtotblocks, gtotbytes);
- X WSTR(workstr);
- X }
- X }
- X } while ((cnt < argc) && ((LSFlags & BREAKFLAG) == 0));
- X
- X/* All done! Clean exit */
- X cleanup(0, 0);
- X}
- END_OF_FILE
- if test 20364 -ne `wc -c <'src/ls.c.ab'`; then
- echo shar: \"'src/ls.c.ab'\" unpacked with wrong size!
- fi
- # end of 'src/ls.c.ab'
- fi
- echo shar: End of archive 2 \(of 4\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 3 4 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 4 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
- Mail comments to the moderator at <amiga-request@cs.odu.edu>.
- Post requests for sources, and general discussion to comp.sys.amiga.
-